package com.baseframe.file.controller;


import com.aliyun.oss.OSSBuilder;
import com.baseframe.file.entity.BaseFile;
import com.baseframe.file.entity.requset.BaseFileRequest;
import com.baseframe.file.service.BaseFileService;
import com.baseframe.mybatis.utils.PageInfo;
import com.baseframe.oss.builds.BaseOssBuilds;
import com.baseframe.oss.entity.Oss;
import com.baseframe.oss.entity.OssFile;
import com.baseframe.oss.template.OssTemplate;
import com.baseframe.tool.container.Kv;
import com.baseframe.tool.result.R;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 *
 */
/**
 * 控制器类，处理文件相关的请求。
 */
@RestController
@RequestMapping("/file")
@AllArgsConstructor
public class BaseFileController {

    private BaseFileService baseFileService;

    /**
     * 上传文件
     *
     * @param file 要上传的文件
     * @return R对象，包含上传结果信息
     */
    @PostMapping("/upload")
    public R<Object> upLoad(@RequestParam("file") MultipartFile file) {
        return baseFileService.uploadFile(file);
    }

    /**
     * 获取文件信息
     *
     * @param fileUrl 文件URL
     * @return R对象，包含文件信息
     */
    @GetMapping("/info")
    public R<Object> getFileInfo(String fileUrl) {
        if (fileUrl == null) {
            return R.fail("缺少必要请求参数~");
        }
        BaseFile baseFile = baseFileService.getFileInfo(fileUrl);
        Kv kv = Kv.create();
        kv.put("name", baseFile.getFilename());
        kv.put("url", fileUrl);
        return R.data(kv);
    }

    /**
     * 获取自己上传的资源文件列表
     *
     * @param pageInfo 分页信息
     * @return R对象，包含资源文件列表
     */
    @GetMapping("/own/page")
    public R<Object> getFilePageList(PageInfo pageInfo) {
        return R.data(baseFileService.getFilePageList(pageInfo));
    }

    /**
     * 添加标签
     *
     * @param request 包含标签信息的请求对象
     * @return R对象，包含添加标签结果信息
     */
    @PostMapping("/add/label")
    public R<Object> addLabel(@RequestBody BaseFileRequest request) {
        return baseFileService.addLabel(request) ? R.success() : R.fail();
    }

    /**
     * 删除标签
     *
     * @param request 包含标签信息的请求对象
     * @return R对象，包含删除标签结果信息
     */
    @PostMapping("/delete/label")
    public R<Object> deleteLabel(@RequestBody BaseFileRequest request) {
        return baseFileService.deleteLabel(request) ? R.success() : R.fail();
    }
}

